﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MESQWinform.Helper
{
    /// <summary>
    /// 数据转换辅助类，提供各种数据类型转换方法
    /// </summary>
    public static class DataConverHelper
    {
        /// <summary>
        /// 将泛型集合转换为DataTable
        /// </summary>
        /// <typeparam name="T">要转换的对象类型</typeparam>
        /// <param name="data">要转换的数据集合</param>
        /// <returns>转换后的DataTable对象</returns>
        public static DataTable ToDataTable<T>(this List<T> data)
        {
            // 获取类型的所有属性
            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
            // 创建DataTable对象
            DataTable dt = new DataTable();
            // 添加列，列名为属性名，列类型为属性类型
            for (int i = 0; i < properties.Count; i++)
            {
                PropertyDescriptor property = properties[i];
                dt.Columns.Add(property.Name, property.PropertyType);
            }
            // 存储每行的值
            object[] values = new object[properties.Count];
            // 遍历集合中的每个对象
            foreach (T item in data)
            {
                // 获取对象的每个属性值
                for (int i = 0; i < values.Length; i++)
                {
                    values[i] = properties[i].GetValue(item);
                }
                // 将值添加到DataTable中
                dt.Rows.Add(values);
            }
            return dt;
        }
    }
}
